﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sakura.Media.AviSynth.Native
{
	/// <summary>
	/// 表示视频的像素格式。
	/// </summary>
	[Flags]
	internal enum PixelFormat
	{
		/// <summary>
		/// 未知格式。
		/// </summary>
		Unknown = 0,

		#region 色彩空间

		/// <summary>
		/// 表示颜色属于 BGR 色彩空间。
		/// </summary>
		Bgr = 1 << 28,
		/// <summary>
		/// 表示颜色属于 YUV 色彩空间。
		/// </summary>
		Yuv = 1 << 29,
		/// <summary>
		/// 表示像素是交错放置的。
		/// </summary>
		Interleaved = 1 << 30,
		/// <summary>
		/// 表示像素是平面放置的。
		/// </summary>
		Plannar = 1 << 31,


		#endregion

		#region 像素格式

		/// <summary>
		/// BGR24 的基本标识，通常不直接使用。
		/// </summary>
		Bgr24Base = 1 << 0,
		/// <summary>
		/// BGR32 的基本标识，通常不直接使用。
		/// </summary>
		Bgr32Base = 1 << 1,
		/// <summary>
		/// YUV2 的基本标识，通常不直接使用。
		/// </summary>
		Yuv2Base = 1 << 2,
		/// <summary>
		/// YV12 的基本标识，通常不直接使用。
		/// </summary>
		YV12Base = 1 << 3,
		/// <summary>
		/// I420 的基本标识，通常不直接使用。
		/// </summary>
		I420Base = 1 << 4,
		/// <summary>
		/// IYUV 的基本标识，通常不直接使用。
		/// </summary>
		IYuvBase = I420,

		#endregion

		#region 掩码

		/// <summary>
		/// 用于获得色彩空间信息的掩码字段。
		/// </summary>
		ColorSpaceMask = 0xF << 28,
		/// <summary>
		/// 用于获得色彩格式的掩码字段。
		/// </summary>
		FormatMask = ~ColorSpaceMask,

		#endregion

		#region 实际类型

		/// <summary>
		/// BGR 24 位格式。
		/// </summary>
		Bgr24 = Bgr24Base | Bgr | Interleaved,
		/// <summary>
		/// BGR 32 位格式。
		/// </summary>
		Bgr32 = Bgr32Base | Bgr | Interleaved,
		/// <summary>
		/// YUV2 交错格式。
		/// </summary>
		Yuv2 = Yuv2Base | Yuv | Interleaved,
		/// <summary>
		/// Y-V-U 平面格式。
		/// </summary>
		YV12 = YV12Base | Yuv | Plannar,
		/// <summary>
		/// Y-U-V 平面格式。
		/// </summary>
		I420 = I420Base | Yuv | Plannar,
		/// <summary>
		/// Y-U-V 平面格式，等效于 <see cref="I420"/>。
		/// </summary>
		IYuv = IYuvBase | Yuv | Plannar

		#endregion
	}
}
